#include <iostream>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>

// int cnt = 0;
// void catchSig(int signo)
// {
//     //std::cout << "获取到一个信号，信号编号是: " << signo << std::endl;
//     std::cout << "cnt: " << cnt << std::endl;
//     //exit(1);
//     // alarm(1);
// }

// void hander(int signo)
// {
//     std::cout << "获取到一个信号，信号编号是: " << signo << std::endl;
//     exit(1);
// }

// static void Usage(const std::string &proc)
// {
//     std::cout << "\nUsage: " << proc << " pid signo\n"
//               << std::endl;
// }

int main(int argc, char *argv[])
{
    // 4. 软件条件 -- "闹钟"其实就是用软件实现的
    // signal(SIGALRM, catchSig);
    // alarm(1);
    // while(true)
    // {
    //     cnt++;
    // }

    // 3.硬件异常产生信号
    // signal(11, catchSig);
    // while (true)
    // {
    //     std::cout << "我在运行中...." << std::endl;
    //     sleep(1);
    //     int *p = nullptr;
    //     *p = 100;
    // }
    //signal(SIGFPE, catchSig);
    // while (true)
    // {
    //     std::cout << "我在运行中...." << std::endl;
    //     sleep(1);
    //     int a = 10;
    //     a /= 0;
    // }

    // 2.操作系统接口调用
    // abort raise
    //  int cnt = 0;
    //  while(cnt <= 10)
    //  {
    //      printf("cnt: %d, pid: %d\n", cnt++, getpid());
    //      sleep(1);
    //      if(cnt >= 5) abort(); // kill(getpid(), signo)
    //      // if(cnt >= 5) raise(9); // kill(getpid(), signo)
    //  }
    // kill
    //  if (argc != 3)
    //  {
    //      Usage(argv[0]);
    //      exit(1);
    //  }

    // pid_t pid = atoi(argv[1]);
    // int signo = atoi(argv[2]);
    // int n = kill(pid, signo);
    // if(n != 0)
    // {
    //     perror("kill");
    // }

    // 1.通过键盘发送信号
    //  while (true)
    //  {
    //      std::cout << "我是一个进程：" << getpid() << std::endl;
    //      sleep(1);
    //      // signal(SIGINT, hander);
    //  }
    return 0;
}